#ifndef VIDWIDGET_H
#define VIDWIDGET_H

//Библиотека Qt.
#include <QWidget>
#include <QPointer>


//Внутренняя библиотека.
#include "params.h"


//Объявление внешних классов.
class DevManager;
class VidDevice;
class QMenu;


class VidWidget : public QWidget
{
	Q_OBJECT
signals:
	void information(const QString &msg);
	void warning(const QString &msg);
	void critical(const QString &msg);

	void sigSetParam(DevParam::SET_PARAM param, QObject *object);

public:
	enum WINTYPE {OPENGL, XVIDEO};

	//Конструктор.
	VidWidget(int index, QWidget *parent = NULL);

	//Деструктор.
	virtual ~VidWidget() {}

	//Функция возврата рекомендуемых размеров видеоокна.
	QSize sizeHint() const;

	//Функция возврата типа видеоокна.
	virtual VidWidget::WINTYPE getType() = 0;

	//Функция возврата списка типов видеоокон.
	static QStringList getTypesList();

	//Функция конвертации типа видеоокна в строку.
	static QString typeToString(VidWidget::WINTYPE wintype);

	//Функция установки менеджера устройств.
	void setDeviceManager(DevManager *devmanager);

	//Функция возврата индекса видеоокна.
	int getIndex();

	//Функция возврата индекса видеоустройства.
	int getDeviceIndex();

	//Функция подключения видеоустройства.
	void connectVideoDevice(VidDevice *viddev);

	//Функция возврата указателя на видеоустройство.
	VidDevice *getDevice();

protected:
	//Событие отпускания кнопки мыши.
	virtual void mouseReleaseEvent(QMouseEvent *event);

	//Событие уровня приложения.
	virtual void customEvent(QEvent *event) = 0;

private:
	//Индекс видеоокна.
	int vidIndex;

	//Безопасный указатель на менеджер устройств.
	QPointer<DevManager> devManager;

	//Безопасный указатель на видеоустройство.
	QPointer<VidDevice> vidDev;

	//Индекс видеоустройства.
	int devIndex;

	//Контекстное меню.
	QMenu *ctxMenu;

private slots:
	//Слот вызова диалога смены наименования видеоустройства.
	void slotChangeDeviceName();

	//Слот вызова диалога параметров видеоустройства.
	void slotShowDeviceParameters();

	//Слот вызова диалога цветовых настроек.
	void slotShowColorParameters();

};

#endif
